package com.xteam.ecsystem.dao.page;


/**
 * 分页信息对象，依赖于DBServerConfig
 * 当从PAGE 传来一个PageInfo 对象时，只需要设置 每页的记录数量(pageSize)，要去的目标页码(curtPage)，就可以实现自动的分页功能
 * 后台数据系统需要设置 总记录数,当前页记录数,总页数由本PAGE计算得出
 * Created by IntelliJ IDEA.
 * User: tom
 * Date: 2006-10-21
 * Time: 12:21:47
 */
public class PageInfo implements Page{
	
	public static final String PROP_CURTPAGE	= "curtPage";
	public static final String PROP_PAGESIZE	= "pageSize";
	public static final String PROP_ROWCOUNTSQL	= "RowCountSQL";
	public static final String PROP_ROWCOUNTHQL	= "RowCountHQL";
	
    /**
     * 每页记录数
     */
    private int pageSize    = Page.PAGE_SIEZ;
    /**
     * 页数
     */
    private int pageCount   = 1;
    /**
     * 总记录数
     */
    public long rowsCount    = 1;
    /**
     * 当前页码
     */
    private int curtPage    = 1;
    /**
     * 下页页码
     */
    private int nextPage    = 1;
    /**
     * 上页页码
     */
    private int prepPage    = 1;
    /**
     * 当前页的起始记录号
     */
    public int curtRowCount= 1;
    
    /**
     * 获取总记录数的SQL语句
     */
    public String RowCountSQL	= null;
    
    /**
     * 获取总记录数的HQL语句
     */
    public String RowCountHQL	= null;
    
    public String key	= "";
    public String value	= "";
    
    public String sortName	= "";
    

    /**
	 * @return 属性sortName的值.
	 */
	public String getSortName() {
		return this.sortName;
	}


	/**
	 * @param sortName 属性sortName.
	 */
	public void setSortName(String sortName) {
		this.sortName = sortName;
	}


	/**
	 * @return 属性key的值.
	 */
	public String getKey() {
		return this.key;
	}


	/**
	 * @param key 属性key.
	 */
	public void setKey(String key) {
		this.key = key;
	}


	/**
	 * @return 属性value的值.
	 */
	public String getValue() {
		return this.value;
	}


	/**
	 * @param value 属性value.
	 */
	public void setValue(String value) {
		this.value = value;
	}


	/**
     * <P>
     * 返回当前记录总数
     * </P>
     * @author 汤垲峰 2009-4-27
     * @return
     */
    public long getRowsCount() {
        return rowsCount;
    }
    

    /**
	 * @return 属性curtRowCount的值.
	 */
	public int getCurtRowCount() {
		return this.curtRowCount;
	}

	/**
	 * @param curtRowCount 属性curtRowCount.
	 */
	public void setCurtRowCount(int curtRowCount) {
		this.curtRowCount = curtRowCount;
	}

	/**
	 * @param rowsCount 属性rowsCount.
	 */
	public void setRowsCount(long rowsCount) {
		this.rowsCount = rowsCount;
		if(this.getCurtPage()>this.getPageCount()){
			this.setCurtPage(1);	//到第一页
		}else if(this.getCurtPage()<1){
			this.setCurtPage(this.getPageCount());	//到最后页
		}
	}

	/**
     * 获取总页数
     * @see com.toms.commons.dbserver.page.Page#getPageCount()
     */
    public int getPageCount() {
    	int c=0;
    	if(this.rowsCount % pageSize !=0) c=1;
    	return (int)(this.rowsCount/pageSize)+c;
    }

    /**
     * 获取每页记录数
     * @see com.toms.commons.dbserver.page.Page#getPageSize()
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 设置每页记录数
     * @see com.toms.commons.dbserver.page.Page#setPageSize(int)
     */
    public void setPageSize(int pageSize) {
    	if(pageSize<1) pageSize	= Page.PAGE_SIEZ;
        this.pageSize = pageSize;
    }

    /**
     * 获取当前页码
     * @see com.toms.commons.dbserver.page.Page#getCurtPage()
     */
    public int getCurtPage() {
        return curtPage;
    }

    /**
     * <P>
     * 设置当前所在页码
     * </P>
     * @author 汤垲峰 2009-4-27
     * @param curtPage
     */
    public void setCurtPage(int curtPage) {
    	if(curtPage<1) curtPage	= pageCount;
        this.curtPage = curtPage;
    }

    /**
     * <P>
     * 获取下页页码
     * </P>
     * @author 汤垲峰 2009-4-27
     * @return
     */
    public int getNextPage() {
        nextPage    = (curtPage<pageCount)?curtPage+1:1;
        return nextPage;
    }

    /**
     * <P>
     * 获取上页页码
     * </P>
     * @author 汤垲峰 2009-4-27
     * @return
     */
    public int getPrepPage() {
        prepPage    = (curtPage>1)?curtPage-1:pageCount;
        return prepPage;
    }

	/**
	 * 获取当前页的记录数
	 * @see com.toms.commons.dbserver.page.Page#getPageRowsCount()
	 */
	public int getPageRowsCount() {
		return 0;
	}

	/**
	 * 到指定的页
	 * @see com.toms.commons.dbserver.page.Page#gotoPage(int)
	 */
	public void gotoPage(int page) {
		setCurtPage(page);
	}

	/**
	 * 到第一页
	 * @see com.toms.commons.dbserver.page.Page#gotoFirstPage()
	 */
	public void gotoFirstPage() {
		gotoPage(0);
	}
	
	/**
	 * <P>
	 * 跳到下一页
	 * </P>
	 * @author 汤垲峰 2009-4-27
	 */
	public void gotoNextPage(){
		setCurtPage(getCurtPage()+1);
	}
	
	/**
	 * <P>
	 * 跳到下一页
	 * </P>
	 * @author 汤垲峰 2009-4-27
	 */
	public void gotoPrepPage(){
		setCurtPage(getCurtPage()-1);
	}

	/**
	 * 到最后一页
	 * @see com.toms.commons.dbserver.page.Page#gotoLastPage()
	 */
	public void gotoLastPage() {
		gotoPage(getPageCount());
	}

	/**
	 * 返回当前页起始记录号
	 * @see com.toms.commons.dbserver.page.Page#getFirstRow()
	 */
	public int getFirstRow() {
		return this.pageSize*(this.curtPage-1);
	}

	/**
	 * 返回 获取总记录数的SQL语句 一般建议为：select count(<ID>) from <TABLE>
	 * @return 属性rowCountSQL的值.
	 */
	public String getRowCountSQL() {
		return this.RowCountSQL;
	}

	/**
	 * 设置 获取总记录数的SQL语句 一般建议为：select count(<ID>) from <TABLE>
	 * @param rowCountSQL 属性rowCountSQL.
	 */
	public void setRowCountSQL(String rowCountSQL) {
		RowCountSQL = rowCountSQL;
	}

	/**
	 * @return 属性rowCountHQL的值.
	 */
	public String getRowCountHQL() {
		return this.RowCountHQL;
	}

	/**
	 * @param rowCountHQL 属性rowCountHQL.
	 */
	public void setRowCountHQL(String rowCountHQL) {
		RowCountHQL = rowCountHQL;
	}


	@Override
	public void setFirstPage(int first) {
		this.gotoPage(first);
	}
}
